package cn.iocoder.yudao.module.ad.service.account;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.ad.controller.admin.account.vo.*;
import cn.iocoder.yudao.module.ad.dal.dataobject.account.AdAccountDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.ad.dal.dataobject.advertiser.AdAdvertiserDO;

/**
 * 广告账号 Service 接口
 *
 * @author 数创万维
 */
public interface AdAccountService {

    /**
     * 创建广告账号
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createAccount(@Valid AdAccountSaveReqVO createReqVO);

    /**
     * 更新广告账号
     *
     * @param updateReqVO 更新信息
     */
    void updateAccount(@Valid AdAccountSaveReqVO updateReqVO);

    /**
     * 删除广告账号
     *
     * @param id 编号
     */
    void deleteAccount(Long id);

    /**
     * 获得广告账号
     *
     * @param id 编号
     * @return 广告账号
     */
    AdAccountDO getAccount(Long id);

    /**
     * 获得广告账号分页
     *
     * @param pageReqVO 分页查询
     * @return 广告账号分页
     */
    PageResult<AdAccountDO> getAccountPage(AdAccountPageReqVO pageReqVO);

    /**
     * 获取广告渠道token授权链接
     * @param id
     * @since 2024-07-01
     * @author PetePower
     * @return
     */
    String getAuthUrl(Long id);

    /**
     * 获取已授权的广告账户
     * @since 2024-07-03
     * @author PetePower
     * @return
     */
    List<AdAdvertiserDO> getAdvertiserList(Long accountId, Long parentId);

    /**
     * 获取树形结构的账户数组
     * @param accountId 广告账户id
     * @since 2024-07-08
     * @author PetePower
     * @return
     */
    List<AdAdvertiserTreeRespVO> getAdvertiserTree(Long accountId);
}